b14d76
@@ -26,9 +26,11 @@
import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.core.Ordered;
+import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.core.type.AnnotationMetadata;
 import org.springframework.core.type.ClassMetadata;
 import org.springframework.core.type.classreading.MetadataReader;
@@ -122,7 +124,7 @@
public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
 			if (beanDef.isAbstract() && !includeAbstractBeanDefs)
 				continue;
 
-			if (isConfigurationClassBeanDefinition(beanDef))
+			if (isConfigurationClassBeanDefinition(beanDef, beanFactory.getBeanClassLoader()))
 				configBeanDefs.registerBeanDefinition(beanName, beanDef);
 		}
 
@@ -181,14 +183,20 @@
public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
 	 * @return whether the BeanDefinition's beanClass (or its ancestry) is
 	 * {@link Configuration}-annotated, false if no beanClass is specified.
 	 */
-	private static boolean isConfigurationClassBeanDefinition(BeanDefinition beanDef) {
+	private static boolean isConfigurationClassBeanDefinition(BeanDefinition beanDef, ClassLoader classLoader) {
+
+		// accommodating SPR-5655
+		Assert.isInstanceOf(AbstractBeanDefinition.class, beanDef);
+		if(((AbstractBeanDefinition) beanDef).hasBeanClass())
+			return AnnotationUtils.findAnnotation(
+					((AbstractBeanDefinition)beanDef).getBeanClass(), Configuration.class) != null;
 
 		String className = beanDef.getBeanClassName();
 
 		while (className != null && !(className.equals(Object.class.getName()))) {
 			try {
 				MetadataReader metadataReader =
-					new SimpleMetadataReaderFactory().getMetadataReader(className);
+					new SimpleMetadataReaderFactory(classLoader).getMetadataReader(className);
 				AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
 				ClassMetadata classMetadata = metadataReader.getClassMetadata();
 
